// vite.config.ts
import {defineConfig} from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite'
import {fileURLToPath, URL} from "node:url";

export default defineConfig({
  plugins: [
    vue(),
    VueI18nPlugin({
      // ================= 基础配置 =================
      // 匹配需要预编译的多语言文件路径（支持 glob 模式）
      include: [
        path.resolve(__dirname, './src/locales/*.json'), // JSON 文件
        path.resolve(__dirname, './src/locales/*.yaml'), // YAML 文件
        path.resolve(__dirname, './src/pages/**/*.i18n.js') // TS 格式的局部翻译
      ],

      // ================= 编译控制 =================
      // 是否强制将数字/布尔值转为字符串函数（默认 false）
      forceStringify: true,

      // 是否启用 JIT 编译（默认 true，Vue I18n v9.3+ 特性）
      jitCompilation: true,

      // 是否移除消息编译器（减小体积，但需确保所有消息已预编译）
      dropMessageCompiler: false,

      // ================= 安全控制 =================
      // 是否严格检查消息中的 HTML 标签（默认 true，防 XSS）
      strictMessage: true,

      // 是否自动转义 HTML 标签（当 strictMessage=false 时建议启用）
      escapeHtml: false,

      // ================= 生产优化 =================
      // 生产环境是否只用运行时版本（默认 true，更小体积）
      runtimeOnly: true,

      // 是否只使用 Composition API（默认 true，移除 Legacy API 减小体积）
      compositionOnly: true,

      // 是否完整安装 Vue I18n（默认 true，设为 false 可 tree-shake 组件/指令）
      fullInstall: true,

      // ================= SFC 相关 =================
      // 默认 SFC 中 <i18n> 块的格式（默认 'json'）
      defaultSFCLang: 'json',

      // 是否全局处理 SFC 中的 <i18n> 块（默认 false）
      globalSFCScope: false,

      // ================= 高级功能 =================
      // 指定要包含的语言（空数组表示包含所有语言）
      onlyLocales: ['en', 'zh-CN'],

      // SSR 模式支持（默认 false）
      ssr: false,

      // 自定义 <i18n> 块内容转换（高级用法）
      transformI18nBlock(source) {
        // 示例：将 YAML 的缩进转为 JSON
        return source.replace(/^\s+/gm, '')
      },

      // ================= 实验性功能 =================
      // 优化 v-t 指令（SSR 必需，默认 false）
      optimizeTranslationDirective: false,

      // 是否复用 vue-i18n 的导入名（兼容 petite-vue-i18n）
      useVueI18nImportName: false
    })
  ],

  // ================ 补充配置（非插件参数） ================
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url)),
      // 确保 Vue I18n 的别名指向正确位置
      'vue-i18n': 'vue-i18n/dist/vue-i18n.runtime.esm-bundler.js'
    }
  }
})